Using the target and gene clusters previously computed, we cluster on the cluster averages. The hierarchical clustering is used to reorder the heatmaps.
library(magrittr)
library(tidyverse)
library(pheatmap)
library(bluster)
library(Matrix)
set.seed(20210818)
CLUSTERS_GENE_UNREG=c(1,7)
## input files
FILE_CLUSTERS_TARGETS="tbl/df_target_ipa_clusters_kd6_essential_ui10.csv"
FILE_CLUSTERS_GENES="tbl/df_gene_ipa_clusters_kd6_essential_ui10.csv"
RDS_DIPA="data/dipa/20221219-dipa-target-gene-kd6-essential.Rds"
RDS_ZDIPA="data/dipa/20221219-zdipa-target-gene-kd6-essential.Rds"
## output files
FILE_OUT_AVG_TARGET="img/heatmap-kd6-essential-ipa-avg-target-clusters.pdf"
FILE_OUT_AVG_GENE="img/heatmap-kd6-essential-ipa-avg-gene-clusters.pdf"
FILE_OUT_AVG_BOTH="img/heatmap-kd6-essential-ipa-avg-both-clusters.pdf"
FILE_OUT_FINAL="img/heatmap-kd6-essential-ipa-ordered.pdf"
## aesthetics
NCOLORS=100
COLORS_BWR <- colorRampPalette(c("blue", "white", "red"))(NCOLORS)
COLORS_MKY <- colorRampPalette(c("magenta", "black", "yellow"))(NCOLORS)
COLORS_YKM <- colorRampPalette(c("yellow", "black", "magenta"))(NCOLORS)
COLORS_RKG <- colorRampPalette(c("red", "black", "green"))(NCOLORS)
breaks_dipa <- seq(-0.5, 0.5, length.out=NCOLORS + 1)
breaks_zdipa <- seq(-4, 4, length.out=NCOLORS + 1)
breaks_zdipa_broad <- seq(-6, 6, length.out=NCOLORS + 1)
breaks_pca <- seq(-20, 20, length.out=NCOLORS + 1)
dipa_target_gene <- readRDS(RDS_DIPA)
dipa_target_gene[is.na(dipa_target_gene)] <- 0
zdipa_target_gene <- readRDS(RDS_ZDIPA)
zdipa_target_gene[is.na(zdipa_target_gene)] <- 0
df_cluster_target <- read_csv(FILE_CLUSTERS_TARGETS) %>%
mutate(cluster_id=factor(cluster_id, levels=sort(unique(cluster_id))))
df_cluster_gene <- read_csv(FILE_CLUSTERS_GENES) %>%
mutate(cluster_id=factor(cluster_id, levels=sort(unique(cluster_id))))
sgid2gene <- df_cluster_target %>%
dplyr::select(sgID_AB, target_gene) %>%
distinct(sgID_AB, target_gene) %>%
deframe()
ens2gene <- df_cluster_gene %>%
dplyr::select(gene_id, gene_name) %>%
distinct(gene_id, gene_name) %>%
deframe()
convert_rownames <- function (mat, in2out) {
mat %>% set_rownames(in2out[rownames(.)])
}
convert_colnames <- function (mat, in2out) {
mat %>% set_colnames(in2out[colnames(.)])
}
idx_targets1 <- df_cluster_target %>%
arrange(cluster_id, target_gene) %$%
sgID_AB
idx_genes1 <- df_cluster_gene %>%
arrange(cluster_id, gene_name) %$%
gene_id
idx_genes_clean <- df_cluster_gene %>%
filter(!(cluster_id %in% CLUSTERS_GENE_UNREG)) %>%
arrange(cluster_id, gene_name) %$%
gene_id
I_cluster_target <- df_cluster_target %>%
dplyr::select(sgID_AB, cluster_id) %>%
deframe %>% fac2sparse
## cluster target means
M_cluster_target <- I_cluster_target %>% { . / rowSums(.) }
mzdipa_cluster_gene <- M_cluster_target[,idx_targets1] %*% zdipa_target_gene[idx_targets1,]
mzdipa_cluster_gene %<>% as.matrix
df_col_annots <- df_cluster_gene %>%
dplyr::select(gene_id, cluster_id) %>%
rename(gene_cluster=cluster_id) %>%
column_to_rownames("gene_id")
pheatmap(mzdipa_cluster_gene[, idx_genes_clean],
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=1, fontsize_row=10,
annotation_col=df_col_annots,
show_colnames=FALSE, show_rownames=TRUE, scale='none',
cluster_rows=TRUE, cluster_cols=FALSE, clustering_method="complete",
cutree_rows=NA, cutree_cols=NA)
idx_clusters_targets <- c(12,14,2,6,15,1,3,4,17,7,9,11,16,8,5,10,13,18)
pheatmap(mzdipa_cluster_gene[idx_clusters_targets, idx_genes_clean],
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=1, fontsize_row=10,
#annotation_row=df_row_annots,
annotation_col=df_col_annots,
show_colnames=FALSE, show_rownames=TRUE, scale='none',
cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete",
#gaps_row=cumsum(table(clusters_targets_final)),
#gaps_col=cumsum(table(clusters_genes_final)) %>% `[`(!duplicated(.)),
cutree_rows=NA, cutree_cols=NA)
idx_targets2 <- df_cluster_target %>%
mutate(cluster_id=factor(cluster_id, levels=idx_clusters_targets)) %>%
arrange(cluster_id, target_gene) %$%
sgID_AB
df_row_annots <- df_cluster_target %>%
dplyr::select(sgID_AB, cluster_id) %>%
mutate(cluster_id=factor(cluster_id, levels=idx_clusters_targets)) %>%
rename(target_cluster=cluster_id) %>%
column_to_rownames("sgID_AB")
pheatmap(zdipa_target_gene[idx_targets2, idx_genes_clean],
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=1, fontsize_row=10,
annotation_row=df_row_annots,
annotation_col=df_col_annots,
show_colnames=FALSE, show_rownames=FALSE, scale='none',
cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete")
I_cluster_gene <- df_cluster_gene %>%
filter(!(cluster_id %in% CLUSTERS_GENE_UNREG)) %>%
dplyr::select(gene_id, cluster_id) %>%
deframe %>% fac2sparse
## cluster target means
M_cluster_gene <- I_cluster_gene %>% { . / rowSums(.) }
mzdipa_target_cluster <- zdipa_target_gene[,idx_genes_clean] %*% t(M_cluster_gene[,idx_genes_clean])
mzdipa_target_cluster %<>% as.matrix
pheatmap(mzdipa_target_cluster[idx_targets2,],
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=10, fontsize_row=10,
show_colnames=TRUE, show_rownames=FALSE, scale='none',
angle_col=0, annotation_names_row=FALSE,
annotation_row=df_row_annots,
cluster_rows=FALSE, cluster_cols=TRUE, clustering_method="complete",
drop_levels=TRUE)
idx_clusters_genes <- as.character(c(18,9,5,2,11,8,4,6,12,10,17,14,16,15,3,13))
pheatmap(mzdipa_target_cluster[idx_targets2, idx_clusters_genes],
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=10, fontsize_row=10,
show_colnames=TRUE, show_rownames=FALSE, scale='none',
annotation_row=df_row_annots,
cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete",
drop_levels=TRUE)
idx_genes2 <- df_cluster_gene %>%
filter(!(cluster_id %in% CLUSTERS_GENE_UNREG)) %>%
mutate(cluster_id=factor(cluster_id, levels=idx_clusters_genes)) %>%
arrange(cluster_id, gene_name) %$%
gene_id
df_col_annots <- df_cluster_gene %>%
dplyr::select(gene_id, cluster_id) %>%
mutate(cluster_id=factor(cluster_id, levels=idx_clusters_genes)) %>%
rename(gene_cluster=cluster_id) %>%
column_to_rownames("gene_id")
gaps_col <- df_cluster_gene %>%
filter(!(cluster_id %in% CLUSTERS_GENE_UNREG)) %>%
mutate(cluster_id=factor(cluster_id, levels=idx_clusters_genes)) %>%
arrange(cluster_id, gene_name) %$%
table(cluster_id) %>%
cumsum
gaps_row <- df_cluster_target %>%
mutate(cluster_id=factor(cluster_id, levels=idx_clusters_targets)) %>%
arrange(cluster_id, target_gene) %$%
table(cluster_id) %>%
cumsum
pheatmap(zdipa_target_gene[idx_targets2, idx_genes2],
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=1, fontsize_row=10,
annotation_row=df_row_annots,
annotation_col=df_col_annots,
show_colnames=FALSE, show_rownames=FALSE, scale='none',
annotation_names_row=FALSE, annotation_names_col=FALSE,
gaps_row=gaps_row,
gaps_col=gaps_col,
cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete")
pheatmap(zdipa_target_gene[idx_targets2, idx_genes2],
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=1, fontsize_row=1,
annotation_row=df_row_annots,
annotation_col=df_col_annots,
show_colnames=TRUE, show_rownames=TRUE, scale='none',
labels_row=sgid2gene[idx_targets2],
labels_col=ens2gene[idx_genes2],
annotation_names_row=FALSE, annotation_names_col=FALSE,
gaps_row=gaps_row,
gaps_col=gaps_col,
cluster_rows=FALSE, cluster_cols=FALSE,
filename=FILE_OUT_FINAL, width=16, height=16)
pheatmap(mzdipa_cluster_gene[, idx_genes2],
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=1, fontsize_row=10,
annotation_col=df_col_annots,
annotation_names_row=FALSE, annotation_names_col=FALSE,
show_colnames=FALSE, show_rownames=TRUE, scale='none',
cluster_rows=TRUE, cluster_cols=FALSE, clustering_method="complete",
cutree_rows=NA, cutree_cols=NA,
filename=FILE_OUT_AVG_TARGET, width=8, height=4)
pheatmap(mzdipa_target_cluster[idx_targets2,],
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=10, fontsize_row=10,
show_colnames=TRUE, show_rownames=FALSE, scale='none',
angle_col=0,
annotation_row=df_row_annots,
annotation_names_row=FALSE, annotation_names_col=FALSE,
cluster_rows=FALSE, cluster_cols=TRUE, clustering_method="complete",
drop_levels=TRUE,
filename=FILE_OUT_AVG_GENE, width=5, height=6)
mzdipa_cluster_cluster <- M_cluster_target[,idx_targets2] %*% mzdipa_target_cluster[idx_targets2,]
pheatmap(mzdipa_cluster_cluster,
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=10, fontsize_row=10,
show_colnames=TRUE, show_rownames=TRUE, scale='none',
angle_col=0,
cluster_rows=TRUE, cluster_cols=TRUE, clustering_method="complete")
pheatmap(mzdipa_cluster_cluster[idx_clusters_targets, idx_clusters_genes],
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=10, fontsize_row=10,
show_colnames=TRUE, show_rownames=TRUE, scale='none',
angle_col=0,
cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete")
pheatmap(mzdipa_cluster_cluster[idx_clusters_targets, idx_clusters_genes],
color=COLORS_BWR,
breaks=breaks_zdipa,
fontsize_col=10, fontsize_row=10,
show_colnames=TRUE, show_rownames=TRUE, scale='none',
angle_col=0,
cluster_rows=FALSE, cluster_cols=FALSE, clustering_method="complete",
filename=FILE_OUT_AVG_BOTH, width=5, height=4)
## R version 4.1.1 (2021-08-10)
## Platform: x86_64-apple-darwin13.4.0 (64-bit)
## Running under: macOS Big Sur 10.16
##
## Matrix products: default
## BLAS/LAPACK: /Users/mfansler/miniconda3/envs/bioc_3_14/lib/libopenblasp-r0.3.18.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] Matrix_1.3-4 bluster_1.4.0 pheatmap_1.0.12 forcats_0.5.1
## [5] stringr_1.4.0 dplyr_1.0.8 purrr_0.3.4 readr_2.1.1
## [9] tidyr_1.1.4 tibble_3.1.7 ggplot2_3.3.5 tidyverse_1.3.1
## [13] magrittr_2.0.3
##
## loaded via a namespace (and not attached):
## [1] httr_1.4.2 sass_0.4.0 bit64_4.0.5
## [4] vroom_1.5.7 jsonlite_1.7.2 modelr_0.1.8
## [7] bslib_0.3.1 assertthat_0.2.1 highr_0.9
## [10] stats4_4.1.1 cellranger_1.1.0 yaml_2.2.1
## [13] pillar_1.7.0 backports_1.4.0 lattice_0.20-45
## [16] glue_1.6.2 digest_0.6.29 RColorBrewer_1.1-2
## [19] rvest_1.0.2 colorspace_2.0-2 htmltools_0.5.2
## [22] pkgconfig_2.0.3 broom_0.8.0 haven_2.4.3
## [25] scales_1.1.1 tzdb_0.2.0 BiocParallel_1.28.0
## [28] generics_0.1.1 farver_2.1.0 ellipsis_0.3.2
## [31] withr_2.4.3 BiocGenerics_0.40.0 cli_3.3.0
## [34] crayon_1.4.2 readxl_1.3.1 evaluate_0.15
## [37] fs_1.5.2 fansi_0.5.0 xml2_1.3.3
## [40] tools_4.1.1 hms_1.1.1 lifecycle_1.0.1
## [43] S4Vectors_0.32.0 munsell_0.5.0 reprex_2.0.1
## [46] cluster_2.1.2 compiler_4.1.1 jquerylib_0.1.4
## [49] rlang_1.0.2 grid_4.1.1 BiocNeighbors_1.12.0
## [52] rstudioapi_0.13 igraph_1.2.9 rmarkdown_2.11
## [55] gtable_0.3.0 DBI_1.1.1 R6_2.5.1
## [58] lubridate_1.8.0 knitr_1.39 fastmap_1.1.0
## [61] bit_4.0.4 utf8_1.2.2 stringi_1.7.6
## [64] parallel_4.1.1 Rcpp_1.0.7 vctrs_0.4.1
## [67] dbplyr_2.1.1 tidyselect_1.1.1 xfun_0.30
## Conda Environment YAML
name: base
channels:
- conda-forge
- bioconda
- defaults
dependencies:
- anaconda-client=1.8.0=pyhd8ed1ab_0
- anaconda-project=0.10.2=pyhd8ed1ab_0
- attrs=21.2.0=pyhd8ed1ab_0
- awscli=1.25.79=py39h6e9494a_0
- backports=1.0=py_2
- backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
- backports.zoneinfo=0.2.1=py39h701faf5_5
- bagit=1.8.1=pyhd8ed1ab_0
- bagit-profile=1.3.1=pyhd8ed1ab_0
- bdbag=1.6.1=pyhd8ed1ab_0
- beautifulsoup4=4.9.3=pyhb0f4dca_0
- blinker=1.4=py_1
- boa=0.13.0=pyha770c72_0
- boolean.py=3.7=py_0
- boto3=1.24.78=pyhd8ed1ab_0
- botocore=1.27.78=pyhd8ed1ab_0
- brotlipy=0.7.0=py39h63b48b0_1004
- bzip2=1.0.8=h0d85af4_4
- c-ares=1.18.1=h0d85af4_0
- ca-certificates=2022.12.7=h033912b_0
- cachecontrol=0.12.11=pyhd8ed1ab_0
- cairo=1.16.0=he43a7df_1008
- cctools=973.0.1=hd9211c8_2
- cctools_osx-64=973.0.1=h3e07e27_2
- certifi=2022.12.7=pyhd8ed1ab_0
- cffi=1.15.1=py39hae9ecf2_0
- chardet=5.0.0=py39h6e9494a_0
- charset-normalizer=2.0.0=pyhd8ed1ab_0
- click=8.1.3=py39h6e9494a_0
- clyent=1.2.2=py_1
- colorama=0.4.3=py_0
- commonmark=0.9.1=py_0
- conda=4.14.0=py39h6e9494a_0
- conda-build=3.21.9=py39h6e9494a_1
- conda-forge-pinning=2021.10.10.22.03.30=hd8ed1ab_0
- conda-libmamba-solver=22.6.0=pyhd8ed1ab_0
- conda-pack=0.6.0=pyhd3deb0d_0
- conda-package-handling=1.9.0=py39ha30fb19_0
- conda-smithy=3.22.1=pyhd8ed1ab_0
- conda-standalone=4.10.3=h694c41f_0
- conda-suggest=0.1.1=pyh9f0ad1d_0
- conda-suggest-conda-forge=2021.8.24=h694c41f_0
- conda-verify=3.1.1=py39h6e9494a_1004
- constructor=3.3.1=py39h6e9494a_0
- coreutils=9.1=h5eb16cf_0
- cryptography=38.0.4=py39hbeae22c_0
- curl=7.86.0=h6df9250_2
- cyrus-sasl=2.1.27=h1e973b7_6
- dataclasses=0.8=pyhc8e2a94_3
- dbus=1.13.6=ha13b53f_2
- deprecated=1.2.12=pyh44b312d_0
- docutils=0.16=py39h6e9494a_3
- expat=2.5.0=hf0c8a7f_0
- ffq=0.2.1=pyhdfd78af_0
- filelock=3.0.12=pyh9f0ad1d_0
- fmt=9.1.0=hb8565cd_0
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
- font-ttf-ubuntu=0.83=hab24e00_0
- fontconfig=2.13.1=h10f422b_1005
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
- freetype=2.10.4=h4cff582_1
- fribidi=1.0.10=hbcb3906_0
- frozendict=2.3.4=py39h701faf5_0
- future=0.18.2=py39h6e9494a_5
- gawk=5.1.0=h8a989fb_0
- gdk-pixbuf=2.42.6=h2e6141f_0
- gettext=0.21.1=h8a4c099_0
- giflib=5.2.1=hbcb3906_2
- git=2.38.1=pl5321he9137ab_0
- git-lfs=2.13.3=h694c41f_0
- gitdb=4.0.7=pyhd8ed1ab_0
- gitpython=3.1.18=pyhd8ed1ab_0
- glib=2.70.2=hcf210ce_0
- glib-tools=2.70.2=hcf210ce_0
- glob2=0.7=py_0
- globus-sdk=2.0.1=pyhd8ed1ab_0
- gmp=6.2.1=h2e338ed_0
- gnupg=2.3.3=hd723a69_0
- gnutls=3.6.13=h756fd2b_1
- graphite2=1.3.13=h2e338ed_1001
- harfbuzz=2.9.0=h159f659_0
- htop=3.2.1=h398481e_0
- htslib=1.15=hc057d7f_0
- hub=2.14.2=hc7d050b_0
- icu=68.1=h74dc148_0
- idna=3.1=pyhd3deb0d_0
- importlib-metadata=4.11.4=py39h6e9494a_0
- importlib_metadata=4.11.4=hd8ed1ab_0
- importlib_resources=5.4.0=pyhd8ed1ab_0
- inotify_simple=1.3.5=pyha770c72_3
- ipython_genutils=0.2.0=py_1
- isodate=0.6.0=py_1
- jbig=2.1=h0d85af4_2003
- jinja2=3.0.1=pyhd8ed1ab_0
- jmespath=0.10.0=pyh9f0ad1d_0
- joblib=1.0.1=pyhd8ed1ab_0
- jpeg=9d=hbcb3906_0
- json5=0.9.5=pyh9f0ad1d_0
- jsonschema=4.3.1=pyhd8ed1ab_0
- jupyter_core=4.11.1=py39h6e9494a_0
- krb5=1.20.1=h049b76e_0
- ld64=609=hd2e7500_2
- ld64_osx-64=609=h2487922_2
- ldid=2.1.2=h6a69015_3
- lerc=2.2.1=h046ec9c_0
- libapr=1.7.0=h0d85af4_5
- libaprutil=1.6.1=h664449b_5
- libarchive=3.5.2=h1a4c773_1
- libassuan=2.5.5=he49afe7_0
- libcurl=7.86.0=h6df9250_2
- libcxx=14.0.6=hccf4f1f_0
- libdb=6.2.32=he49afe7_0
- libdeflate=1.10=h0d85af4_0
- libedit=3.1.20191231=h0678c8f_2
- libev=4.33=haf1e3a3_1
- libffi=3.4.2=h0d85af4_5
- libgcrypt=1.10.1=h5eb16cf_0
- libglib=2.70.2=hf1fb8c0_0
- libgpg-error=1.45=h8d84a1d_0
- libiconv=1.17=hac89ed1_0
- libidn2=2.3.2=h0d85af4_0
- libksba=1.3.5=h0a44026_1000
- liblief=0.11.5=he49afe7_0
- libllvm12=12.0.1=hd011deb_2
- libmagic=5.39=haaf19a9_0
- libmamba=1.0.0=hfcd2f64_2
- libmambapy=1.0.0=py39h75c867e_2
- libnghttp2=1.47.0=h5aae05b_1
- libntlm=1.4=h0d85af4_1002
- libpng=1.6.37=h7cec526_2
- librsvg=2.50.7=hd2a7919_0
- libsolv=0.7.22=hd9580d2_0
- libsqlite=3.40.0=ha978bb4_0
- libssh2=1.10.0=h47af595_3
- libtiff=4.3.0=h1167814_0
- libunistring=0.9.10=h0d85af4_0
- libutf8proc=2.8.0=hb7f2c08_0
- libwebp-base=1.2.1=h0d85af4_0
- libxml2=2.9.12=h93ec3fd_0
- libxslt=1.1.33=h5739fc3_2
- libzlib=1.2.13=hfd90126_4
- license-expression=1.2=py_0
- lockfile=0.12.2=py_1
- lxml=4.8.0=py39h63b48b0_2
- lz4-c=1.9.3=he49afe7_1
- lzo=2.10=haf1e3a3_1000
- mamba=1.0.0=py39h412838c_2
- markupsafe=2.1.1=py39h63b48b0_1
- msgpack-python=1.0.4=py39h92daf61_1
- msrest=0.6.21=pyh44b312d_0
- nbformat=5.1.3=pyhd8ed1ab_0
- ncurses=6.3=h96cf925_1
- nettle=3.6=hedd7734_0
- npth=1.6=h96cf925_1001
- ntbtls=0.1.2=hd9629dc_1000
- oauthlib=3.1.1=pyhd8ed1ab_0
- openssl=3.0.7=hfd90126_1
- pango=1.48.9=ha05cd14_0
- patch=2.7.6=hbcf498f_1002
- pcre=8.45=he49afe7_0
- pcre2=10.37=ha16e1b2_0
- perl=5.32.1=0_h0d85af4_perl5
- pigz=2.6=h5dbffcc_0
- pip=21.2.4=pyhd8ed1ab_0
- pixman=0.40.0=hbcb3906_0
- pkginfo=1.7.1=pyhd8ed1ab_0
- popt=1.16=h7b079dc_2002
- prompt-toolkit=3.0.20=pyha770c72_0
- prompt_toolkit=3.0.20=hd8ed1ab_0
- psutil=5.9.2=py39ha30fb19_0
- py-lief=0.11.5=py39h9fcab8e_0
- pyasn1=0.4.8=py_0
- pybind11-abi=4=hd8ed1ab_3
- pycosat=0.6.3=py39h63b48b0_1010
- pycparser=2.20=pyh9f0ad1d_2
- pycrypto=2.6.1=py39h89e85a6_1006
- pycryptodome=3.16.0=py39hf75c729_0
- pygithub=1.53=py_0
- pygments=2.10.0=pyhd8ed1ab_0
- pyjwt=1.7.1=py_0
- pyrsistent=0.18.1=py39h63b48b0_1
- pysocks=1.7.1=pyha2e5f31_6
- python=3.9.15=h709bd14_0_cpython
- python-dateutil=2.8.2=pyhd8ed1ab_0
- python-libarchive-c=4.0=py39h6e9494a_1
- python-tzdata=2021.5=pyhd8ed1ab_0
- python_abi=3.9=2_cp39
- pytz=2021.1=pyhd8ed1ab_0
- pytz-deprecation-shim=0.1.0.post0=py39h6e9494a_2
- pyyaml=5.4.1=py39h701faf5_3
- readline=8.1.2=h3899abd_0
- reproc=14.2.3=h0d85af4_0
- reproc-cpp=14.2.3=he49afe7_0
- requests=2.28.1=pyhd8ed1ab_1
- requests-oauthlib=1.3.0=pyh9f0ad1d_0
- rich=10.16.1=pyhd8ed1ab_0
- ripgrep=13.0.0=h244e342_0
- rsa=4.7.2=pyh44b312d_0
- rsync=3.2.7=h30d983d_0
- ruamel.yaml=0.17.21=py39h63b48b0_1
- ruamel.yaml.clib=0.2.6=py39h63b48b0_1
- ruamel_yaml=0.15.80=py39h701faf5_1007
- s3transfer=0.6.0=pyhd8ed1ab_0
- scrypt=0.8.18=py39h05e4e13_4
- setuptools=65.3.0=pyhd8ed1ab_1
- six=1.16.0=pyh6c4a22f_0
- smartmontools=7.2=h940c156_0
- smmap=3.0.5=pyh44b312d_0
- soupsieve=2.3.1=pyhd8ed1ab_0
- sqlite=3.38.5=hd9f0692_0
- subversion=1.14.2=pl5321h886d438_3
- tapi=1100.0.11=h9ce4665_0
- tk=8.6.12=h5dbffcc_0
- toolz=0.11.1=py_0
- tornado=6.2=py39h701faf5_0
- tqdm=4.62.2=pyhd8ed1ab_0
- traitlets=5.1.0=pyhd8ed1ab_0
- typing_extensions=3.10.0.0=pyha770c72_0
- tzdata=2021e=he74cb21_0
- tzlocal=4.2=py39h6e9494a_1
- urllib3=1.26.6=pyhd8ed1ab_0
- vsts-python-api=0.1.22=py_0
- watchgod=0.7=pyhd8ed1ab_0
- wcwidth=0.2.5=pyh9f0ad1d_2
- wget=1.20.3=hd3787cc_1
- wheel=0.37.0=pyhd8ed1ab_1
- wrapt=1.14.1=py39h701faf5_0
- xxhash=0.8.0=h35c211d_3
- xz=5.2.6=h775f41a_0
- yaml=0.2.5=haf1e3a3_0
- yaml-cpp=0.7.0=hb486fe8_1
- zipp=3.5.0=pyhd8ed1ab_0
- zlib=1.2.13=hfd90126_4
- zstd=1.5.2=hfa58983_4
- pip:
- pyopenssl==20.0.1
prefix: /Users/mfansler/miniconda3